今日內容:OOP、Constructor、Overloaded Constructor、物件陣列、static
物件導向程式設計,也是Java的精隨
Objects = Attributes(儲存資料) + methods(提供功能)
在同一個src資料夾裡面可以宣告多個不同的java class
然後就可以直接在main裡面宣告物件了 (與C++不同,不需額外import)
宣告方式與scanner, random一樣
如果要讀取物件的特定值,需要用 . (dot operator) 進行存取
下面舉例如何創建一個class,以汽車為例
public class Car{
String make = "Ford";
String model = "Mustang";
int year = 2025;
double price = 54999.99;
boolean isRunning = false;
// 以上這些是Car這個Class的屬性(Attributes),儲存在每一個被宣告出來的Car物件(Object)內
void start(){
isRunning = true;
System.out.println("You start the engine");
}
void stop(){
isRunning = false;
System.out.println("You stop the engine");
}
// 而這些則是Car這個class的功能(methods),也是每個Car物件都可以獨立使用的
}
回到Main的main函式中進行宣告
public class Main{
public static void main(String[] args){
Car car1 = new Car();
Car car2 = new Car();
System.out.println(car1.isRunning); // 可以直接用 . 進行public attributes的存取,此時為false
car1.start(); // 物件.method 可以呼叫該物件的成員函式
System.out.println(car1.isRunning); // 經由start(),isRunning改為true
// ...
}
}
以上是最基礎的class用法舉例
屬於method的一種,用於傳入參數使物件初始化
每一個物件在被建立之前,系統會先尋找這個class的constructor,對其進行初始化
而constructor的宣告方式為 class名稱 加上 (參數) 就好
以Student為Class進行舉例
public class Student{
String name;
int age;
double gpa;
boolean isEnrolled;
// 每位學生都有以上的Attributes,用來儲存資料
// 以下就是Student這個class的constructor,有著name, age, gpa三個屬性
// 在main函式中宣告Student物件時,需要傳入這三個參數才能正確初始化物件
Student(String name, int age, double gpa){
this.name = name; // 使用this關鍵字來指定修改物件內容,避免重名造成的影響,也更直觀
this.age = age;
this.gpa = gpa;
this.isEnrolled = true;
}
}
則在main函式中
public class Main{
public static void main(String[] args){
Student student = new Student("Amy", 22, 4.0); // 正確宣告方式
Student student = new Student(); // 錯誤宣告方式,物件無法被正確初始化
}
}
一個class可以同時有多個Constructor,根據傳入的參數不同,系統會自動尋找適配的constructor進行物件初始化,做法一樣是 物件名稱 + (參數)
同樣以上面的Student為例
public class Student{
String name;
int age;
double gpa;
boolean isEnrolled;
Student(String name, int age, double gpa){
this.name = name;
this.age = age;
this.gpa = gpa;
this.isEnrolled = true;
}
// 接下來我們可以建立其他的constructor
Student(){ // 沒有參數的constructor
this.name = "Unknown";
this.age = 0;
this.gpa = 0.0;
this.inEnrolled = false;
}
// 只知道名稱的constructor
Student(String name){
this.name = name;
this.age = 0;
this.gpa = 0.0;
this.isEnrolled = false;
}
// 以及其他任何可能想到的組合都可以
}
與一般資料型態(例如int)的宣告其實沒有差很多,只是改成了指定的物件,用法也一樣
//一樣使用上面的Student的class
Student[] students = {new Student("A", 15, 4.0),
new Student("B", 18, 3.2),
new Student("C", 22, 3.5)};
for(Student student : students){
student.showData();
}
使同一個物件的成員有共用的資料內容
static關鍵字可以讓被宣告的內容隸屬於class本身而非object
用途是如果每一個object都在共同使用同一個class中的資料,可以減少記憶體的消耗,並方便共同管理、調整
今天是接觸Java OOP的第一天,了解到如何建構自己的class,以及如何初始化,並結合應用到自己的程式裡面。
今天也是快樂學習的一天,明天繼續!